package com.sagframe.sagacity.sqltoy.plus.multi.update;

import com.sagframe.sagacity.sqltoy.plus.conditions.eumn.SqlKeyword;
import com.sagframe.sagacity.sqltoy.plus.conditions.interfaces.SFunction;
import com.sagframe.sagacity.sqltoy.plus.multi.AbstractLambdaMultiWrapper;
import com.sagframe.sagacity.sqltoy.plus.multi.MultiContext;
import com.sagframe.sagacity.sqltoy.plus.multi.LambdaMultiStepWrapper;

public class LambdaMultiUpdateWrapper extends AbstractLambdaMultiWrapper<LambdaMultiUpdateWrapper> implements LambdaUpdate<LambdaMultiUpdateWrapper> {

    public LambdaMultiUpdateWrapper() {
        super((Class<?>)null);
        context.addOperateSqlSegment(SqlKeyword.UPDATE);
    }

    public LambdaMultiUpdateWrapper(MultiContext context) {
        super(context);
    }

    @Override
    public <T> LambdaMultiUpdateWrapper set(boolean condition, SFunction<T, ?> column, Object val) {
        if (condition) {
            context.addUpdateSqlAssembler(column, val);
        }
        return typedThis;
    }

    @Override
    public LambdaMultiStepWrapper.LambdaMatchJoin<LambdaMultiUpdateWrapper> from(Class<?> clazz) {
        return new LambdaMultiStepWrapper.MultiStepWrapperBuilder<>(typedThis, context).from(clazz);
    }

    @Override
    protected LambdaMultiUpdateWrapper instance() {
        return new LambdaMultiUpdateWrapper(context);
    }


}
